package com.reservation.mapper;

import com.reservation.entity.Bookings;
import com.reservation.entity.MeetingRooms;
import jakarta.validation.constraints.NotBlank;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;

@Mapper
public interface BookingMapper {

    /**
     * 检查指定会议室在给定时间段是否已被预订
     */
    boolean isRoomBooked(@Param("roomId") Long roomId,
                         @Param("startTime") LocalDateTime startTime,
                         @Param("endTime") LocalDateTime endTime);
                         
    /**
     * 插入新的预订记录
     * @param booking 预订信息
     * @return 影响的行数
     */
    int insertBooking(Bookings booking);
    
    /**
     * 根据ID获取会议室的每小时价格
     * @param roomId 会议室ID
     * @return 每小时价格
     */
    java.math.BigDecimal getRoomPricePerHour(Long roomId);

    /**
     * 查询指定日期未预约满的会议室
     * @param date 查询日期
     * @return 可预约的会议室列表
     */
    List<MeetingRooms> findAvailableRooms(@Param("date") LocalDate date);



    /**
     * 根据订单ID查询预订信息
     * @param id 订单ID
     * @return 预订信息
     */
    Bookings getBookingByOrderId(@Param("id")long id);


    /**
     * 更新预订信息
     * @param booking 预订信息
     * @return 影响的行数
     */
    int updateBooking(Bookings booking);
}